package logica.persistencia;

import java.util.LinkedList;
import java.util.List;

import logica.Entidad;
import logica.EntidadRol;

import org.jdom.Element;

import xml.ConstantesXml;
import xml.XMLManager;

public class EntidadRolPersistente {
	private EntidadRol entidadRol;
	private Element padre;
	int identificador = 0;
	
	public EntidadRolPersistente(EntidadRol entidadRol) {
		this.setEntidadRol(entidadRol);
		identificador= XMLManager.getIdentificador(entidadRol);
	}
	
	public Element getPadre() {
		return padre;
	}

	public void setPadre(Element padre) {
		this.padre = padre;
	}
			
	public EntidadRol getEntidadRol() {
		return entidadRol;
	}
	
	public void setEntidadRol(EntidadRol entidadRol) {
		this.entidadRol = entidadRol;
	}
	
	public void serializar() {
		Element elementoEntidadRol = new Element(ConstantesXml.ELEMENTO_ENTIDAD_ROL);
		EntidadPersistente entRP = this.entidadRol.getEntidad().getObjetoDiagramaPersistente();
		int idRef = entRP.getIdentificador();
		
		String nombreRef = this.entidadRol.getEntidad().getNombre();
		elementoEntidadRol.setAttribute(ConstantesXml.ATRIBUTO_ID_OBJETO, String.valueOf(identificador));
		elementoEntidadRol.setAttribute(ConstantesXml.ATRIBUTO_ID_REF,  String.valueOf(idRef));
		elementoEntidadRol.setAttribute(ConstantesXml.ATRIBUTO_NOMBRE_REF, nombreRef);
		elementoEntidadRol.setAttribute(ConstantesXml.ATRIBUTO_CARDINALIDAD_MINIMA,  String.valueOf(entidadRol.getCardinalidadMin()));
		elementoEntidadRol.setAttribute(ConstantesXml.ATRIBUTO_CARDINALIDAD_MAXIMA,  String.valueOf(entidadRol.getCardinalidadMax()));
		
		
		XMLManager.getInstance().agregarElementoAElemento(padre, elementoEntidadRol);
	}

	public void hidratar(Element elementoEntidadRol) {
		String cardMin = elementoEntidadRol.getAttributeValue(ConstantesXml.ATRIBUTO_CARDINALIDAD_MINIMA);
		String cardMax = elementoEntidadRol.getAttributeValue(ConstantesXml.ATRIBUTO_CARDINALIDAD_MAXIMA);
		this.entidadRol.setCardinalidadMin(Integer.valueOf(cardMin));
		this.entidadRol.setCardinalidadMax(Integer.valueOf(cardMax));	
	}
	
	public static List<EntidadRol> hidratarEntidadesRol(Element elementoRelacion){
		List<EntidadRol> entidadesRol = new LinkedList<EntidadRol>();
		Element listaElementosEntidadesRol = elementoRelacion.getChild(ConstantesXml.LISTA_ENTIDAD_ROL);
		if (listaElementosEntidadesRol != null) {
			@SuppressWarnings("unchecked")
			List<Element> elementosEntidadesRol = listaElementosEntidadesRol.getChildren(ConstantesXml.ELEMENTO_ENTIDAD_ROL);
							
			for (Element elementoEntidadRol : elementosEntidadesRol) {
				Entidad ent = EntidadPersistente.hidratarEntidadEnHash(elementoEntidadRol);
				if (ent != null) {
					EntidadRol entR = new EntidadRol(ent);
					EntidadRolPersistente entRP = new EntidadRolPersistente(entR);
					entRP.hidratar(elementoEntidadRol);
					entidadesRol.add(entR);
					
					//Hasheo el elemento para poder obtenerlo después a través del id
					String claveHash = elementoEntidadRol.getAttributeValue(ConstantesXml.ATRIBUTO_ID_OBJETO);
					XMLManager.getInstance().hashObjetoDiagramaConClave(claveHash, entR);
				}	
			}
		}
		return entidadesRol;
	}
	

}
